home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / doc.lha / documentation / manual / future.mss < prev    next >
Text File  |  1987-06-30  |  10KB  |  320 lines

  1. @part[FUTURE, root "TMAN.MSS"]    @Comment{-*-System:TMAN-*-}
  2. @appendix[Future work]
  3. @label[FutureChapter]
  4.  
  5.  
  6. This appendix catalogs some ideas about @Tau[]'s future development.
  7. It is provided as a stimulus for user input, and as an assurance
  8. that these problems are known and are being addressed.
  9.  
  10.  
  11. @Section[Language design problems]
  12.  
  13. A system for managing multiple namespaces @dash[] loading files into
  14. appropriate environments, and communicating names from one
  15. module to another in a controlled way @dash[] is sorely needed.
  16.  
  17. Better aggregate structures are needed (arrays, hash tables).
  18.  
  19. Read macro procedures ought to take a read table as an argument.
  20.  
  21. A condition/error signalling system is needed.
  22.  
  23. Need to make up for the loss of Scheme's general @tc[CATCH] by
  24. implementing coroutines.  Indeterminacy, timeslicing, and
  25. synchronization primitives would be nice also.
  26.  
  27. Each special form should be marked as being either primitive or a
  28. macro.  This would allow users to write robust program-manipulating
  29. programs using only the released language.
  30.  
  31. There should be a way to remove bindings from locales.
  32.  
  33. There ought to be able to have variables named by objects other than
  34. symbols.  Maybe there ought to be a generalized @tc[INTERN] which
  35. creates a unique instance of any object, or something like OWL's
  36. @tc[UCONS] (unique cons) primitive.
  37.  
  38. Should reintroduce @tc[DEFINE-LOCALE]?
  39.  
  40. @tc[MEMQ], @tc[ASSQ], @tc[POSQ], etc. are inconsistent with the other
  41. aggregate accessing routines in that the aggregate argument follows the
  42. index argument and not vice versa.
  43.  
  44. Ideas for list routines: @tc[SUBSET], @tc[FILTER], @tc[FIND],
  45. set operations.
  46.  
  47. Need a term more specific than @qu"tree" for whatever those things are.
  48.  
  49. The tree manipulation routines (e.g. @tc[ALIKEV?]) should be
  50. user-extensible.  Big problem with what @tc[TREE-HASH] should do with
  51. unusual leaf nodes.
  52.  
  53. There should be a general way to do generic dispatches based on more
  54. than one argument.
  55.  
  56. There should be a non-side-effecting way to define methods for structures.
  57.  
  58. @tc[SYNONYM] is a misleading name.
  59.  
  60. @tc[SETTER] is inadequate.  Why not @tc[PUSHER], @tc[SWAPPER],
  61. etc.?  Is there any way to do this that's at the same time convenient,
  62. general, and efficient?
  63.  
  64. @tc[CASE] and @tc[SELECT] should use @tc[EQUIV?] instead of @tc[EQ?].
  65.  
  66. Method-clauses aren't incrementally redefinable.  What to do about this.
  67. Objects handling many operations become quite unmanageable.
  68. Maybe this is an implementation and editor problem, not a language problem.
  69.  
  70. The looping/iteration constructs are maybe a little too simple.  Figure
  71. out some better ones without compromising principles, if possible.
  72. Waters' @tc[LetS] looks sort of good.
  73.  
  74. @tc[CHECK-ARG] is ad hoc.  Need type inference and other compiler smarts.
  75. Need better type declaration syntax.
  76.  
  77. The character @qu"abstraction" is perhaps too closely tied to ASCII.
  78. The @wt<#[Char ...]> syntax should probably be @wt<#[Ascii ...]>
  79. instead.
  80.  
  81. There should be case-ignoring character and string comparison predicates.
  82.  
  83. @tc[STRING-POSQ] is not a good name.
  84.  
  85. @tc[STRING-REPLACE] should probably be called @tc[STRING-REPLACE!],
  86. or flushed.  Similarly with @tc[VECTOR-FILL], @tc[VECTOR-REPLACE].
  87.  
  88. The name @tc[DIGIT?] is nconsistent with @tc[DIGIT->CHAR] @dash[]
  89. does the term @i[digit] mean a character or an integer?
  90.  
  91. What about @tc[UPPERCASE?] @yl[] @tc[UPPER-CASE?]?  Ugh.
  92.  
  93. Enumerated types.
  94.  
  95. Shouldn't it be @tc[*T*] and @tc[*F*] for true and false?  (This is
  96. mostly a frivolous suggestion, but...)
  97.  
  98. Infinities?
  99.  
  100. @tc[DIV] is a random name.
  101.  
  102. Should @tc[NOT-ZERO?] and friends be renamed to be @tc[NONZERO?] etc.?
  103.  
  104. Divulge expression syntax for backquote?
  105.  
  106. Release @tc[WALK-POPULATION]?  It's redundant, but handy.
  107.  
  108. Maybe release @tc[BOUND?].
  109.  
  110. Need a way to make read tables be read-only.
  111.  
  112. Need @tc[LET-SYNTAX-TABLE] and @tc[LET-READ-TABLE] features?
  113.  
  114. Maybe flush the random not-parsable-as-number-implies-symbol syntax feature.
  115. It can be a real pain to catch typos in numbers.
  116.  
  117. I/O system improvements needed:
  118. @itemize[
  119. Streams are pretty random.  How does a stream differ from a sequence?
  120. There should be ways to coerce from streams to (infinite) sequences,
  121. and vice versa.  Maybe the term @i[stream] should follow Sussman's usage
  122. (infinte sequence), not Common Lisp's (pointer into same).
  123.  
  124. The @tc[FORMAT] sublanguage is random and unextensible.
  125.  
  126. Block-mode and/or @qu"binary" I/O, for database or whatever applications.
  127.  
  128. There ought to be a way to make the printer complain if it comes
  129. across an object which isn't re-readable.
  130.  
  131. Ought to be a way to establish the line-length of a stream.
  132.  
  133. @tc[HPOS] and @tc[VPOS] aren't precisely defined.
  134.  
  135. @tc[SPACE] operation needs a better definition.
  136. ]
  137.  
  138. Structure package improvements needed:
  139. @itemize[
  140. @tc[DEFINE-STRUCTURE-TYPE] features: initializers, variant record types,
  141. arguments to constructor procedure, type-restricted fields, alternate
  142. name construction.
  143.  
  144. Maybe structures should have an official external syntax.
  145.  
  146. Structures ought to be callable.
  147.  
  148. @tc[COPY-STRUCTURE] and @tc[COPY-STRUCTURE!] ought to take as an
  149. additional argument the structure type to which the structure belongs.
  150. Alternatively, a copying procedure could be associated with the
  151. structure type object itself.
  152.  
  153. Maybe there ought to be a way to test initializedness of structure components.
  154. ]
  155.  
  156.  
  157. @section[Common Lisp influence]
  158.  
  159. The design and implementation of @tau[] began around the same time that
  160. the Common Lisp design effort started in earnest.  Some of the goals
  161. of the projects have been similar; in many cases, the @tau[] designers
  162. left certain problems for the Common Lisp designers to work out,
  163. intentionally ignoring many sticky issues, such as numeric routines,
  164. sequences, and arrays, in order to work on other areas.
  165.  
  166. Now that the Common Lisp language has matured, and portable
  167. implementations are approaching reality, two distinct integration
  168. projects are in order: importing ideas and facilities from Common
  169. Lisp into @Tau[] (with appropriate customization); and building a
  170. Common Lisp emulation package in @Tau[].
  171.  
  172. @Tau[] itself will never contain Common Lisp as a subset, but it should be
  173. suitable as an implementation language for a Common Lisp.
  174. This will probably take the form of alternate evaluator, reader, printer,
  175. and namespace, together with a Common Lisp-to-@Tau[] translator.
  176.  
  177. The following Common Lisp features, at least, should be incorporated
  178. into @Tau[] in some form:
  179. @itemize[
  180.   Arrays.
  181.  
  182.   Sequences.  (These would clean up a lot of the current clutter with the
  183.   string and vector routines, but introduce a new level of implementation
  184.   hair.)
  185.  
  186.   Multiple values.  These can be simulated now with continuation-passing,
  187.   but the syntax is clumsy.
  188.  
  189.   Numeric routines.  Ratios and complexes.
  190.   Multiple floating point precisions.
  191.  
  192.   @tc[SHIFTF] and @tc[ROTATEF].  (These are generalized versions of @Tau[]
  193.   @tc[SWAP] and @tc[EXCHANGE].)
  194.  
  195.   Hash tables.
  196.  
  197.   @tc[FORMAT] enhancements: floating-point formats, etc.
  198.  
  199.   File dates.  Time and date manipulation.  Time and date parsing.
  200. ]
  201.  
  202.  
  203. @section[Bugs in the implementation]
  204.  
  205. @label[BugsSection] @comment{preface}
  206.  
  207. The implementation (@Timp[] 2.7) doesn't implement everything described
  208. in this manual.
  209.  
  210. @itemize[
  211.     Not implemented:
  212.     @tc[ATAN2],
  213.     @tc[JOIN],
  214.     @tc[ROUND],
  215.     @tc[STREAM-POSITION],
  216.     and @tc[TRUNCATE].
  217. ]
  218.  
  219. Many things are implemented incorrectly.
  220.  
  221. @itemize[
  222.     Deficiencies in syntax environments (they don't exist per se) and in
  223.     locales (shadowing loses).
  224.  
  225.     @tc[GENERATE-SYMBOL]:  The implementation generates obscure
  226.     names, but doesn't
  227.     guarantee uniqueness.  That is, the symbols are interned.
  228.  
  229.     @tc[ANY?] and @tc[EVERY?] of more than one list don't work.
  230.  
  231.     @tc[GET] and @tc[PUT] work only on symbols.
  232.  
  233.     @tc[READ-LINE] and @tc[UNREAD-CHAR] interact badly.
  234.  
  235.     There is no way to trace an operation.
  236. ]
  237.  
  238. Many things are implemented less efficiently than they ought to be.
  239.  
  240. @itemize[
  241.     The garbage collector is slow.  This should be fixed.
  242.  
  243.     There ought to be an option to invoke the standard compiler on
  244.     demand, as code is run, instead of all at once, as code is loaded.
  245.  
  246.     @tc[BIND] is implemented in a pretty cons-intensive way;
  247.     there's a bigger performance penalty for dynamic binding than one would
  248.     find in other Lisp implementations.
  249.  
  250.     @qu"Lexprs" are inefficient because they always cons a list for the
  251.     rest-variable.
  252.  
  253.     The i/o system doesn't do any buffering; this really slows down
  254.     reading and printing a lot, most notably the loading of code files.
  255.  
  256.     Operation dispatch could be done using hash tables.  @tc[DEFINE-OPERATION]
  257.     needs to do early binding.  This is feasible, but the implementation
  258.     could become quite hairy.
  259.  
  260.     Locales are permanent (!), and forward references to shadowed variables
  261.     will lose big, especially with the standard compiler.
  262.  
  263.     The interpreter conses a lot more than it ought to.  It ought to do some
  264.     small amount of closure analysis, or else use McDermott's dynamic
  265.     migration hack.
  266.  
  267.     The combinator routines are pretty useless since TC doesn't know
  268.     anything about them.  This should be fixed.  For example,
  269.     @tc[((COMPOSE CAR CDR) '(A B C))] is evaluated, even in compiled code,
  270.     by actually consing a procedure, and then invoking it.
  271. ]
  272.  
  273. Many things in the system are implemented less smoothly than they ought to be.
  274.  
  275. @itemize[
  276.     Many system routines still don't check their argument types, for example
  277.     @tc[LOWERCASE?] and @tc[UPPERCASE?].
  278.  
  279.     Redefining @tc[DEFINE-CONSTANT]'ed and @tc[DEFINE-INTEGRABLE]'d
  280.     should report an error condition.
  281.  
  282.     Newline characters following input lines come out at the wrong place
  283.     in transcript files.
  284.  
  285.     @tc[LOAD] ought to be smarter about file dates, checking for
  286.     recompilation, etc.
  287.  
  288.     Interpreted @tc[QUOTE] ought to enforce read-only-ness.
  289.  
  290.     There ought to be a way to enforce the downwards-only-ness of escape
  291.     procedures.
  292. ]
  293.  
  294. @dc{
  295. TC bugs.
  296.  
  297. @itemize[
  298.     Sometimes screws up the stack pointer.
  299.  
  300.     DEFINE-INTEGRABLE of a recursive procedure loses.
  301. ]
  302. }
  303.  
  304. Missing features.
  305.  
  306. @itemize[
  307.     @tc[SUSPEND] and/or clean embedded-system-building tools.
  308.  
  309.     Help system.
  310.  
  311.     More system self-knowledge: who calls x, who does x call, type analysis,
  312.     etc.  Masterscope-like stuff.
  313.  
  314.     Block compilation.
  315.  
  316.     There should be a version of @tc[TRACE] which @i[destructively]
  317.     modifies a procedure so that it acts traced.
  318.  
  319. ]
  320.